<?php
/**
 * @author Vitaly
 * Date: 02.05.12
 */

/*
 * Служит прослойкой между моделью комментария и работой с DbService
 */

class CommentMapper
{
    private $connection; // хранит ссылку на singleton экземпляр DbServide

    function __construct()
    {
        $this->connection = DbService::instance();
    }

    // выполняет добавление комментария из модели в БД
    // возвращает id комментария

    function add(CommentModel $comment)
    {
        $commentdata = array(
            'message' => $comment->getMessage(),
            'author'  => $comment->getAuthor(),
            'text'    => $comment->getText()
        );
        $comment->setId($this->connection->insert('comments', $commentdata));
        return $comment->getId();
    }

    // выполняет поиск комментария по id
    // возвращает модель комментария или false

    function find($id)
    {
        $result = $this->connection->fetchAssocOnce($this->connection->select('comments', 'id=' . $id));
        if(!empty($result))
        {
            $comment = new CommentModel();
            $comment->setId($result['id'])
                    ->setAuthor($result['author'])
                    ->setMessage($result['message'])
                    ->setText($result['text']);
            return $comment;
        }
        else
            return false;
    }

    //Добавляет элемент массива 'comments' со всеми комментариями к сообщению c id $message['id']

    function getCommentsArray($msgId)
    {
        $userMapper = new UserMapper();
        $commentsArray = $this->connection->fetchAssoc($this->connection->select('comments', 'message=' . $msgId));
        if(!empty($commentsArray))
        {
            //вытаскиваем авторов
            foreach($commentsArray as &$comment)
            {
                $comment['author'] = $userMapper->findArray($comment['author']);
            }
        }
        return $commentsArray;
    }
}
